/*
 * Created by XiaoDongLei
 * Copyright (c) 2017-2017
 * Apache License
 * Version 2.0, January 2004
 * http://www.apache.org/licenses/
 *
 *
 *
 */
package orders;

import org.springframework.data.neo4j.annotation.EndNode;
import org.springframework.data.neo4j.annotation.GraphId;
import org.springframework.data.neo4j.annotation.RelationshipEntity;
import org.springframework.data.neo4j.annotation.StartNode;
import scala.Product;

/**
 * @author XiaoDongLei
 * @Package orders
 * @date 2018/4/1
 * @Description: 使用更为复杂的关联关系。
 *
 * 条目--LineItem类
 *
 * 1、在这个新的模型中，订单中产品的数量是条目中的一个属性，而产品本身是另外一个概念。与前面一样，订单和产品都是节点，而条目是关联关系。因为现在的条目必须要包含一个数量值，关联关系不像前面那么简单。我们需要定义一个类来代表条目，比如如下程序清单所示的LineItem。
 *
 * 2、@StartNode和@EndNode注解用在定义关联关系两端的属性上。在本例中，Order是开始节点，Product是结束节点。
 *
 * 最后，LineItem类有一个quantity属性，当关联关系创建的时候，它会持久化到数据库中。
 *
 * 领域对象已经添加了注解，现在就可以保存与读取节点和关联关系了。我们首先看一下如何使用Spring Data Neo4j中的Neo4jTemplate实现面向模板的数据访问。
 *
 */
@RelationshipEntity(type = "HAS_LINE_ITEM_FOR")
public class LineItem {

	@GraphId
	private Long id;

	@StartNode
	private Order order;

	@EndNode
	private Product product;

	private int quantity;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Order getOrder() {
		return order;
	}

	public void setOrder(Order order) {
		this.order = order;
	}

	public Product getProduct() {
		return product;
	}

	public void setProduct(Product product) {
		this.product = product;
	}

	public int getQuantity() {
		return quantity;
	}

	public void setQuantity(int quantity) {
		this.quantity = quantity;
	}
}
